/*
 * ServicoGenerico.java
 *
 * Created on 17 de Maio de 2007, 12:07
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package pt.iscte.dcti.es.rhplus.servico;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Hashtable;

import pt.iscte.dcti.es.rhplus.sistema.persistencia.AcessoBD;

/**
 * 
 * @author Gustavo Cabral
 * @author Helena Monteiro
 * @author Joao Catarino
 * @author Tiago Moreiras
 */
public class ServicoGenerico {

	/** Creates a new instance of ServicoGenerico */
	public ServicoGenerico(final int id_servico_generico, final String tipo, final String especialidade, final double preco) {

		this.id_servico_generico = id_servico_generico;
		this.tipo = tipo;
		this.especialidade = especialidade;
		this.preco = preco;
	}

	public int getIdServicoGenerico() {
		return id_servico_generico;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(final String tipo) {
		this.tipo = tipo;
	}

	public String getEspecialidade() {
		return especialidade;
	}

	public void setEspecialidade(final String especialidade) {
		this.especialidade = especialidade;
	}

	public double getPreco() {
		return this.preco;
	}

	public void setPreco(final double preco) {
		this.preco = preco;
	}

	public static ServicoGenerico devolve(final int id_servico_generico) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_servico_generico");
		Hashtable<String, Object> dados_da_pessoa = new Hashtable<String, Object>();
		dados_da_pessoa.put("var_id_servico_generico", id_servico_generico);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_da_pessoa);

		result_set.next();

		// Cria o servico generico
		String tipo = result_set.getString("tipo");
		String especialidade = result_set.getString("especialidade");
		double preco = result_set.getDouble("preco");

		acesso_bd.fechaLigacao();

		ServicoGenerico servico_generico = new ServicoGenerico(id_servico_generico, tipo, especialidade, preco);

		return servico_generico;
	}

	public static ServicoGenerico devolve(final String tipo, final String especialidade) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		// Consulta a BD
		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("devolver_servico_generico_por_tipo_e_especialidade");
		Hashtable<String, Object> dados_do_servico = new Hashtable<String, Object>();
		dados_do_servico.put("var_tipo", tipo);
		dados_do_servico.put("var_especialidade", especialidade);
		ResultSet result_set = acesso_bd.executaSelect(qryName, dados_do_servico);

		result_set.next();

		// Cria o servico generico
		int id_servico_generico = result_set.getInt("id_servico_generico");
		double preco = result_set.getDouble("preco");

		acesso_bd.fechaLigacao();

		ServicoGenerico servico_generico = new ServicoGenerico(id_servico_generico, tipo, especialidade, preco);

		return servico_generico;
	}

	public static void insere(final Hashtable<String, Object> dados_do_servico_generico) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("inserir_servico_generico");
		acesso_bd.executaUpdate(qryName, dados_do_servico_generico);
		acesso_bd.fechaLigacao();

	}

	public static void altera(final Hashtable<String, Object> dados_do_servico_generico) throws SQLException, ClassNotFoundException,
			InstantiationException, IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("alterar_servico_generico");
		acesso_bd.executaUpdate(qryName, dados_do_servico_generico);
		acesso_bd.fechaLigacao();

	}

	public static void remove(final int id_servico_generico) throws SQLException, ClassNotFoundException, InstantiationException,
			IllegalAccessException {

		AcessoBD acesso_bd = new AcessoBD();
		acesso_bd.carregaDriverEAbreLigacao();
		String qryName = new String("remover_servico_generico");
		Hashtable<String, Object> dados_do_servico_generico = new Hashtable<String, Object>();
		dados_do_servico_generico.put("var_id_servico_generico", new Integer(id_servico_generico));

		acesso_bd.executaUpdate(qryName, dados_do_servico_generico);
		acesso_bd.fechaLigacao();
	}

	public void gravaParaBaseDeDados() throws SQLException, ClassNotFoundException, InstantiationException, IllegalAccessException {

		ServicoGenerico.altera(this.toHashtable());
	}

	public Hashtable<String, Object> toHashtable() {

		Hashtable<String, Object> dados_servico_generico = new Hashtable<String, Object>();

		dados_servico_generico.put("var_id_servico_generico", new Integer(this.getIdServicoGenerico()));
		dados_servico_generico.put("var_tipo", this.getTipo());
		dados_servico_generico.put("var_especialidade", this.getEspecialidade());

		return dados_servico_generico;
	}

	private int id_servico_generico;
	private String tipo;
	private String especialidade;
	private double preco;
}
